/**
 * 工厂模式
 *
 * 一、简单工厂与工厂方法模式对比
 *　1.结构复杂度
 *      简单工厂占优势, 简单工厂模式只需要一个工厂类, 工厂方法模式的工厂类随着产品类个数增加而增加,
 *      会使类的个数越来越多, 从而增加了结构的复杂程度
 *  2.代码复杂度
 *      代码复杂度和结构复杂度相矛盾, 简单工厂模式的工厂随着产品类的增加需要增加很多方法,
 *      而工厂方法模式每个具体工厂只完成单一任务，代码简洁
 *  3.客户端编程难度
 *      工厂方法模式虽然在工厂类结构中引入了接口,从而满足了OCP原则,但是在客户端编码中需要对工厂类进行实例化,
 *      而简单工厂类是个静态类, 在客户端无需实例化
 *  4.管理上的难度
 *      工厂方法模式完全满足OCP原则(开闭原则), 即拥有非常好的扩展性.简单工厂同样具备良好的扩展性,
 *      扩展的时候紧需要修改少量代码就可满泽扩展性的要求,　尽管没有完全满足OCP原则，　但不要太拘泥于设计理论
 *
 *  分析得出,简单工厂模式更好用更方便些,工厂方法模式更"先进"一些,但有时过于先进的东西未必合适使用
 *
 * 二、抽象工厂模式使用情形
 *  1.一个系统不应当依赖于产品实例如何被创建,组合和表达的细节这对于所有形态的工厂模式都是重要的
 *  2.这个系统的产品有多余一个的产品族(产品系列),而系统之消费其中一族的产品
 *  3.同属于一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来(比如因特尔主板必须使用因特尔CPU)
 *  4.系统提供一个产品类的库,所有产品以同样的接口出现,从而是客户端不依赖于实现
 *
 * 三、抽象工厂的优点和缺点
 *  1.分离接口和实现
 *  2.使切换产品族变得更容易
 *
 * 抽象工厂模式实为工厂方法模式对于多产品的平行扩展
 *
 * */
package com.jy.designpattern.demo.factorypattern;